package com.itlin.handeinterview;

import java.math.BigDecimal;

/**
 * @author 所谓伊人
 * @date 2022/11/29 - 17:43
 */
public class HanDeInterView {
    /**
     * 有一家超市，出售苹果和草莓。其中苹果 8 元/斤，草莓 13 元/斤。
     * 现在顾客 A 在超市购买了若干斤苹果和草莓，需要计算一共多少钱？
     * 请编写函数，对于 A 购买的水果斤数 (水果斤数为大于等于 0 的整数)，计算并返回所购买商品的总价。
     * @param appleWeight 苹果重量
     * @param strawberryWight 草莓重量
     * @return 总价
     */
    public double titleOne(int appleWeight, int strawberryWight) {
        // 参数检验 重量不能为负数
        if (appleWeight < 0 || strawberryWight < 0){
            throw new RuntimeException("重量不能为负数");
        }
        //水果总金额
        double count = 0.0;
        // 苹果
        Fruit appleFruit = new Fruit("苹果",8,appleWeight,1);
        // 香蕉
        Fruit strawberryFruit = new Fruit("草莓",13,strawberryWight,1);

        count = appleFruit.getSum() + strawberryFruit.getSum();
        return count;
    }

    /**
     * 超市增加了一种水果芒果，其定价为 20 元/斤。
     * 现在顾客 B 在超市购买了若干斤苹果、 草莓和芒果，需计算一共需要多少钱？
     * 请编写函数，对于 B 购买的水果斤数 (水果斤数为大于等于 0 的整数)，计算并返回所购买商品的总价。
     * @param appleWeight 苹果重量
     * @param strawberryWight 草莓重量
     * @param mangoWight 芒果重量
     * @return 总价
     */
    public double titleTwo(int appleWeight, int strawberryWight, int mangoWight) {
        // 参数检验 重量不能为负数
        if (appleWeight < 0 || strawberryWight < 0 || mangoWight < 0){
            throw new RuntimeException("重量不能为负数");
        }
        //水果总金额
        double count = 0.0;
        //芒果
        Fruit mangoFruit = new Fruit("芒果",20,mangoWight,1);

        count = titleOne(appleWeight,strawberryWight) + mangoFruit.getSum();
        return count;
    }

    /**
     * 超市做促销活动，草莓限时打 8 折。
     * 现在顾客 C 在超市购买了若干斤苹果、 草莓和芒果，需计算一共需要多少钱？
     * 请编写函数，对于 C 购买的水果斤数 (水果斤数为大于等于 0 的整数)，计算并返回所购买商品的总价。
     * @param appleWeight 苹果重量
     * @param strawberryWight 草莓重量
     * @param mangoWight 芒果重量
     * @return 总价
     */
    public double titleThree(int appleWeight, int strawberryWight, int mangoWight) {
        // 参数检验 重量不能为负数
        if (appleWeight < 0 || strawberryWight < 0 || mangoWight < 0){
            throw new RuntimeException("重量不能为负数");
        }
        //水果总金额
        double count = 0.0;
        // 苹果
        Fruit appleFruit = new Fruit("苹果",8,appleWeight,1);
        // 香蕉
        Fruit strawberryFruit = new Fruit("草莓",13,strawberryWight,0.8);
        //芒果
        Fruit mangoFruit = new Fruit("芒果",20,mangoWight,1);

        count = appleFruit.getSum() + strawberryFruit.getSum() + mangoFruit.getSum();
        return count;
    }


    /**
     * 促销活动效果明显，超市继续加大促销力度，购物满 100 减 10 块。
     * 现在顾客 D 在超市购买了若干斤苹果、 草莓和芒果，需计算一共需要多少钱？
     * 请编写函数，对于 C 购买的水果斤数 (水果斤数为大于等于 0 的整数)，计算并返回所购买商品的总价。
     * @param appleWeight 苹果重量
     * @param strawberryWight 草莓重量
     * @param mangoWight 芒果重量
     * @return 总价
     */
    public double titleFour(int appleWeight, int strawberryWight, int mangoWight) {
        // 参数检验 重量不能为负数
        if (appleWeight < 0 || strawberryWight < 0 || mangoWight < 0){
            throw new RuntimeException("重量不能为负数");
        }
        //水果总金额
        double count = titleThree(appleWeight,strawberryWight,mangoWight);

        // 满减金额
        double preferential = (int)(count/100)*10;
        //double运算，精度问题
        BigDecimal p1 = new BigDecimal(Double.toString(count));
        BigDecimal p2 = new BigDecimal(Double.toString(preferential));
        return p1.subtract(p2).doubleValue();
    }
}
